package com.qf.util;

import com.qf.entity.Admin;
import com.qf.entity.Student;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * static 修饰的成员 是类级别的成员，全局只有一份
 * 非static 的成员 是对象级别的成员，每个对象都有一份
 *
 * description: 数据的存储工具类 - 暂时充当数据库的作用
 * author: Ken
 * 公众号：Java架构栈
 */
public class DataUtils {

    private static List<Admin> admins = new CopyOnWriteArrayList<>();
    private static List<Student> students = new CopyOnWriteArrayList<>();

    /**
     * 给系统一个默认的数据
     */
    static {
        Admin admin = new Admin();
        admin.setUsername("admin");
        admin.setPassword("123456");
        admin.setName("小明");
        admin.setSex("男");
        admin.setJiguan("广东省");
        admin.setPowers(Arrays.asList("1"));
        //默认添加一个管理员
        addAdmin(admin);

        Student student = new Student();
        student.setName("小明");
        student.setAge(18);
        student.setSex(1);
        addStudent(student);

        Student student2 = new Student();
        student2.setName("小红");
        student2.setAge(18);
        student2.setSex(0);
        addStudent(student2);

        Student student3 = new Student();
        student3.setName("小刚");
        student3.setAge(20);
        student3.setSex(1);
        addStudent(student3);
    }

    /**
     * 添加管理员对象
     * @param admin
     */
    public static void addAdmin(Admin admin){
        admins.add(admin);
    }

    /**
     * 提供一个用户名和密码，返回对应的管理员信息
     * @param username
     * @param password
     * @return
     */
    public static Admin queryAdmin(String username, String password) {
        for (Admin admin : admins) {
            if (admin.getUsername().equals(username) && admin.getPassword().equals(password)) {
                return admin;
            }
        }
        return null;
    }

    /**
     * 新增学生
     * @param student
     */
    public static void addStudent(Student student){
        students.add(student);
    }

    /**
     * 查询所有学生
     * @return
     */
    public static List<Student> queryStudent(){
        return new ArrayList<>(students);
    }

    /**
     * 根据学生名称删除学生记录
     * @param name
     * @return
     */
    public static synchronized boolean deleteStudent(String name){
        for (Student student : new ArrayList<>(students)) {
            if (student.getName().equals(name)) {
                //找到需要删除的学生
                students.remove(student);
                return true;
            }
        }
        return false;
    }
}
